'use strict'

function foo(x, y) {
  return x*(x+y)
}

console.log(foo.length)

foo.fa = function () {
  console.log('I am fa')
}

console.log(foo(2,3))
foo.fa()

/** 函数的原型 */
//function声明的函数一定会自动具备prototype属性。
foo.prototype.fa = function () {
  console.log('我是另一个fa')
}

//function声明的函数可以进行new操作

let obj = new foo()
//obj.__proto__ 指向 foo.prototype
//访问obj.fa会沿着原型链查找
obj.fa()

/** 箭头函数 */

let arrow_func = (x, y) => {
  return x*(x+y)
}

//箭头函数没有原型
console.log(arrow_func.prototype)

try {
  let obj = new arrow_func()
} catch (err) {
  //Error实例都会有message属性用于描述错误信息。
  console.log(err.message)
} finally {
  console.log('结束了')
}
